package swimv2gm.bl.util;

/**
 * Funzioni di supporto e convalida dati.
 * 
 * @author Matteo Gallesio
 */
public final class Utilities {
	/**
	 * Il dato dev'essere valutato come indirizzo e-mail.
	 */
	public static final short EMAIL = 0;
	/**
	 * Il dato dev'essere valutato come un dato obbligatorio.
	 */
	public static final short REQUIRED = 1;
	/**
	 * Il dato dev'essere valutato come una password.
	 */
	public static final short PASSWORD = 2;
	/**
	 * Il dato dev'essere valutato come numerico (usato per numeri di telefono
	 * ed eventualmente vuoto).
	 */
	public static final short PHONE = 3;

	/**
	 * Verifica la validità di un dato a seconda del tipo definito.
	 * 
	 * @param input
	 *            il dato da valutare
	 * @param type
	 *            il tipo del dato
	 * @return <code>true</code> se il dato è valido per il tipo dato,
	 *         <code>false</code> altrimenti
	 */
	public static boolean validate(String input,short type) {
		switch(type) {
			case EMAIL:
				// only for common addresses, a full validator would be much
				// more complex and appropriate for a real application
				return input != null && input.length() <= 254
						&& input.matches("[\\w-_$\\+]+(\\.[\\w-_$\\+]+)*@[\\w-_$\\+]+(\\.[\\w-_$\\+]+)*");
			case REQUIRED:
				return input != null && input.length() > 0;
			case PHONE:
				return input == null || input.matches("\\d*");
			case PASSWORD:
				return input != null && input.length() > 6;
			default:
				return false;
		}
	}

	/**
	 * Sostituisce nella stringa fornita i caratteri <code>&lt;</code> e
	 * <code>&gt;</code> con le rispettive entità HTML per evitare problemi con
	 * in markup in fase di visualizzazione.
	 * 
	 * @param input
	 *            la stringa da modificare
	 * @return la stringa modificata
	 */
	public static String filterTags(String input) {
		if (input == null)
			return null;
		else
			return input.replace("<","&lt;").replace(">","&gt;");
	}
}